package com.xueyi.workflow.service;

import com.xueyi.common.core.web.page.TableDataInfo;
import com.xueyi.workflow.domain.dto.WfProcessInstanceDto;
import com.xueyi.workflow.domain.dto.StartProcessRequest;
import com.xueyi.workflow.domain.query.WfProcessInstanceQuery;

import java.util.List;

/**
 * 流程实例Service接口
 *
 * @author xueyi
 * @date 2024-07-03
 */
public interface IWfProcessInstanceService {

    /**
     * 查询流程实例分页列表
     */
    TableDataInfo<WfProcessInstanceDto> queryPageList(WfProcessInstanceQuery query);

    /**
     * 查询流程实例详情
     */
    WfProcessInstanceDto getProcessInstanceDetail(Long id);

    /**
     * 发起流程
     */
    WfProcessInstanceDto startProcess(StartProcessRequest request);

    /**
     * 撤销流程实例
     */
    Boolean cancelProcessInstance(String id, String reason);

    /**
     * 暂停流程实例
     */
    Boolean suspendProcessInstance(String id);

    /**
     * 恢复流程实例
     */
    Boolean resumeProcessInstance(String id);

    /**
     * 查询流程历史列表
     */
    TableDataInfo<WfProcessInstanceDto> getProcessHistoryList(WfProcessInstanceQuery query);
    
    /**
     * 更新流程实例状态为已完成
     */
    Boolean updateStatusToCompleted(String processInstanceId);
    
    /**
     * 更新流程实例状态为已暂停
     */
    Boolean updateStatusToSuspended(String processInstanceId, String reason);
    
    /**
     * 更新流程实例状态为运行中
     */
    Boolean updateStatusToRunning(String processInstanceId);
    
    /**
     * 更新流程实例状态为已终止
     */
    Boolean updateStatusToTerminated(String processInstanceId, String reason);
    
    /**
     * 更新流程实例状态为错误
     */
    Boolean updateStatusToError(String processInstanceId, String reason);
} 